//给定两个整型数字 N 与 M，以及表示比特位置的 i 与 j（i <= j，且从 0 位开始计算）。 
//
// 编写一种方法，使 M 对应的二进制数字插入 N 对应的二进制数字的第 i ~ j 位区域，不足之处用 0 补齐。具体插入过程如图所示。 
//
// 
//
// 题目保证从 i 位到 j 位足以容纳 M， 例如： M = 10011，则 i～j 区域至少可容纳 5 位。 
//
// 
//
// 示例 1： 
//
// 
// 输入：N = 1024(10000000000), M = 19(10011), i = 2, j = 6
// 输出：N = 1100(10001001100)
// 
//
// 示例 2： 
//
// 
// 输入：N = 0, M = 31(11111), i = 0, j = 4
// 输出：N = 31(11111)
// 
//
// Related Topics 位运算 👍 83 👎 0


package LeetCode.editor.cn;

/**
 * @author ldltd
 * @date 2025-07-17 00:10:15
 * @description 面试题 05.01.插入
 */
public class InsertIntoBitsLcci{
	 public static void main(String[] args) {
	 	 //测试代码
	 	 InsertIntoBitsLcci fun=new InsertIntoBitsLcci();
	 	 Solution solution = fun.new Solution();

	 }
	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int insertBits(int N, int M, int i, int j) {
		for (int idx = 0; idx < 31; idx++) {
			// 如果 idx 在 i 和 j 之间，清除 N 的对应位
			if (idx >= i && idx <= j) {
				N &= ~(1 << idx);
			}
			// 如果 M 的对应位为 1，则设置 N 的对应位
			if ((M & (1 << (idx - i))) != 0) {
				N |= (1 << idx);
			}
		}
		return N;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
